/*
MyOpenLab by Carmelo Salafia www.myopenlab.de
Copyright (C) 2004  Carmelo Salafia cswi@gmx.de

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package VisualLogic.variables;

import MyParser.OpenVariable;
import VisualLogic.*;
import java.util.ArrayList;
import java.util.Hashtable;

public class VSFlowInfo extends VSObject
{
    public ArrayList parameterDefinitions = new ArrayList(); // enth�lt OpenVariable
    public ArrayList variablenListe = new ArrayList();       // enth�lt OpenVariable
    public Hashtable tags = new Hashtable();       // F�r irgendwelche Parameter die durch die ganze Linie laufen
    public Object returnValue=null;
    public ExternalIF source=null;
    
          
    public VSFlowInfo()
    {
        //value=new String[columns][rows];
    }
    
    @Override
    public void copyReferenceFrom(Object in)
    {
      copyValueFrom(in);
    }    
    
    @Override
    public void copyValueFrom(Object in)
    {
        if (in!=null)
        {
          VSFlowInfo temp =(VSFlowInfo)in;
          this.parameterDefinitions=temp.parameterDefinitions;
          this.variablenListe=temp.variablenListe;
          this.tags=temp.tags;          
          this.returnValue=temp.returnValue;
                    
          this.source = temp.source;          
          setChanged(temp.isChanged());
        } else 
        {
            this.variablenListe.clear();
        }
    }     
    
    @Override
    public void saveToStream(java.io.FileOutputStream fos)
    {
    }        
    
    @Override
    public void loadFromStream(java.io.FileInputStream fis) 
    {
            
    }       
    
    
    public int getDataType(Object datatype)
    {
        if (datatype instanceof Double)
        {
            return OpenVariable.C_DOUBLE;
        }else
        if (datatype instanceof String)
        {
            return OpenVariable.C_STRING;
        }else
        if (datatype instanceof Boolean)
        {
            return OpenVariable.C_BOOLEAN;
        }else return -1;        
        
    }    
    
    public int getDataType(String datatype)
    {
        datatype=datatype.trim();
        
        if (datatype.equalsIgnoreCase("DOUBLE"))
        {
            return OpenVariable.C_DOUBLE;
        }else
        if (datatype.equalsIgnoreCase("STRING"))
        {
            return OpenVariable.C_STRING;
        }else
        if (datatype.equalsIgnoreCase("BOOLEAN"))
        {
            return OpenVariable.C_BOOLEAN;
        }else return -1;        
        
    }
    
    public OpenVariable addVariable(String varName, int datatype)
    {
        OpenVariable result = new OpenVariable();
        result.name=varName;
        result.datatype=datatype;
        variablenListe.add(result);
        
        generateVariable(result);

        return result;
    }
    
    public OpenVariable addParamter(String varName, int datatype)
    {
        OpenVariable result = new OpenVariable();
        result.name=varName;
        result.datatype=datatype;
        parameterDefinitions.add(result);                
        return result;
    }
    
    
    /*public OpenVariable addVariable()
    {
        OpenVariable result = new OpenVariable();
        result.name=varName;
        result.datatype=datatype;
        variablenListe.add(result);
        
        return result;
    }*/
    
    public void generateVariable(OpenVariable node)
    {
        //OpenVariable node;
        //for (int i=0;i<variablenListe.size();i++)
        {
            //node= (OpenVariable)variablenListe.get(i);
            
            if (node.datatype==0)
            {
                node.value= new Double(0);
            }
            if (node.datatype==1)
            {
                node.value= new String("");
            }
            if (node.datatype==2)
            {
                node.value= new Boolean(false);
            }
        }                
    }    
    
    public OpenVariable getVariable(String varname)
    {
        varname=varname.trim();
        OpenVariable node;
        for (int i=0;i<variablenListe.size();i++)
        {
            node= (OpenVariable)variablenListe.get(i);
            
            if (varname.equals(node.name.trim()))
            {
                return node;
            }
        }
        return null;
    }
    
    
    public void setVariable(String varname,Object value)
    {
        OpenVariable o = getVariable(varname);
        if (o!=null)
        {
            if (o.value instanceof Boolean && value instanceof Boolean)
            {                
                o.value = value;
            }else
            if (o.value instanceof Double && value instanceof Double)
            {                
                o.value = value;
            }else
            if (o.value instanceof String && value instanceof String)
            {
                o.value = value;
            }else
            {
                System.out.println("Error setting Variable");
            }
        } else
        {
         //   Tools.showMessage("Variable \""+varname+"\" not definied! \nPlease define the variable");
        }

    }
    
    
}
